Data entities in databases often have a time element linked to them. Bi-temporal databases are known (ones with valid time and transaction time). When a relational database for example an Oracle™ database is designed, great care is taken in the writing of the software that controls the data and sets up the data structure to allow for all queries that will be made. A kernel is created to control allowable changes to data entries, within relationship rules linking the data entries. The relationship rules all need to be specified in advance. To allow for the correction of errors that are introduced when entering data into the database (either because the data enterer made some human error, or because they themselves were working on incorrect information), databases often have roll-back software and memories that are used to recreate the “then” content of the databases so that queries of the database can return answers to queries that are the same as that which the query would have returned at a specified date in the past (the current view data having been corrected to correct the error). Such roll-back infrastructure is memory and processor intensive, and expensive and awkward to write.
Furthermore, writing the software code for a relational database has previously been a bespoke task requiring skilled people, and a task that needs doing again should there be a new query that the manager (person) of the database wants to run. It can be a real problem if one thinks of a new query to run on an existing relational database. SQL may not produce good results if the relational integrity between data entities cannot cope with the new query as it is run at different times in the computer system.